package com.wfm.schedule;

import cn.hutool.core.io.FileUtil;
import com.wfm.constants.Constants;
import com.wfm.saver.LocalFileSaver;
import com.wfm.queue.DataQueue;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

@Service
@Slf4j
public class FileNumMonitor {

    @Autowired
    private LocalFileSaver localFileSaver;

    @Autowired
    private DataQueue dataQueue;

    // 定时任务，每隔五秒执行一次。扫描数量，如果数量不足 500w，就生成数据。
    // 按照 QPS 2w/s 算，可以支撑 4 分钟的使用量。 每隔 5s 扫描一下，每次补充 100w 数据，基本保证补充线程与获取线程不互相影响。
    @PostConstruct
    public void init() {
        log.info("【监听文件服务】检测文件个数服务启动...");
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
        scheduledExecutorService.scheduleAtFixedRate(() -> {
            log.info("【监听文件服务】检测文件个数开始");
            int filesNum = FileUtil.listFileNames(Constants.BASE_DIR).size();
            log.info("【监听文件服务】文件个数{}",filesNum);
            if (filesNum<Constants.FILE_NUM){
                log.info("文件数不足，新增文件");
                log.info("当前文件个数{}小于{}，增加文件直到满足条件",filesNum,Constants.FILE_NUM);
                // 新增文件
                localFileSaver.save();
//                // 重新获得文件数
//                filesNum = FileUtil.listFileNames(Constants.BASE_DIR).size();
            }
            log.info("【监听文件服务】检测文件个数结束");
        }, 0, 10, TimeUnit.SECONDS);
    }

}
